const WebSocket = require('ws');
const port = 18123;
const wss = new WebSocket.Server({ port });

let clients = {};
// 监听连接事件
wss.on('connection', (ws, request) => {
    // 接收客户端消息
    ws.on('message', (data) => {
        // 将Buffer转换为字符串
        if (Buffer.isBuffer(data)) {
            data = data.toString();
        }
        // 如果数据是心跳包则直接返回
        if (data === "1") {
            return;
        }
        let message;
        try {
            message = JSON.parse(data);
            console.log('收到消息:', message);
        } catch (err) {
            console.error('JSON解析错误:', err);
            console.error('原始数据:', data);
            return;
        }

        // 设置来源(aiccyun和anmi)，如果消息没有来源就说明是普通通信
        if (message.origin) {
            ws.origin = message.origin;
            clients[message.origin] = ws;
            console.log('客户端已连接:', message.origin);
        } else {
            if (message.to?.includes("anmi")) {
                clients.anmi?.send(data);
            } else if (message.to?.includes("aiccyun")) {
                clients.aiccyun?.send(data);
            }
        }
    });

    // 连接关闭
    ws.on('close', () => {
        delete clients[ws.origin];
    });

    // 发生错误
    ws.on('error', (err) => {
        console.error('连接出错:', err);
    });

    // 主动给客户端发送欢迎消息
    ws.send('1');
});

// 定时发送心跳包
setInterval(() => {
    clients.aiccyun?.ping();
    clients.aiccyun?.send("1");
    clients.anmi?.ping();
    clients.anmi?.send("1");
}, 5 * 1000);

console.log(`WebSocket 服务器运行在 ws://localhost:${ port }`);